package com.bamanker.authserver.config;

import lombok.RequiredArgsConstructor;

/**
 * @author bamanker
 */
//@EnableWebSecurity
//@Configuration
@RequiredArgsConstructor
public class DefaultSecurityConfig {
//
//    /**
//     * 登录地址，前后端分离就填写完整的url路径，不分离填写相对路径
//     */
//    private final String LOGIN_URL = "http://127.0.0.1:5173";
//
//    private final RedisSecurityContextRepository redisSecurityContextRepository;
//
//    /**
//     * 配置认证相关的过滤器链
//     *
//     * @param http spring security核心配置类
//     * @return 过滤器链
//     * @throws Exception 抛出
//     */
//    @Bean
//    @Order(2)
//    public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http)
//            throws Exception {
//        // 添加跨域过滤器
////        http.addFilter(corsFilter());
//        // 禁用 csrf 与 cors
//        http.csrf(AbstractHttpConfigurer::disable);
//        http.cors(AbstractHttpConfigurer::disable);
//        http.authorizeHttpRequests((authorize) -> authorize
//                        // 放行静态资源
//                        .requestMatchers(new AntPathRequestMatcher("/actuator/**"),
//                                new AntPathRequestMatcher("/oauth2/**"),
//                                new AntPathRequestMatcher("/**/*.json"),
//                                new AntPathRequestMatcher("/login"),
//                                new AntPathRequestMatcher("/getCaptcha"),
//                                new AntPathRequestMatcher("/getSmsCaptcha"),
//                                new AntPathRequestMatcher("/webjars/**"),
//                                new AntPathRequestMatcher("/assets/**"),
//                                new AntPathRequestMatcher("/**/*.html")).permitAll()
//                        .anyRequest().authenticated()
//                )
//                .cors(Customizer.withDefaults())
//                .csrf(AbstractHttpConfigurer::disable)
////                .httpBasic(Customizer.withDefaults())
////				// Form login handles the redirect to the login page from the
////				// authorization server filter chain
//                // 指定登录页面
//                .formLogin(formLogin -> {
//                            formLogin.loginPage("/login");
//                            if (UrlUtils.isAbsoluteUrl(LOGIN_URL)) {
//                                // 登录成功和失败改为写回json，不重定向了
//                                formLogin.successHandler(new LoginSuccessHandler());
//                                formLogin.failureHandler(new LoginFailureHandler());
//                            }
//                        }
//                );
//
//        // 在UsernamePasswordAuthenticationFilter拦截器之前添加验证码校验拦截器，并拦截POST的登录接口
//        //http.addFilterBefore(new CaptchaAuthenticationFilter("/login"), UsernamePasswordAuthenticationFilter.class);
//        // 添加BearerTokenAuthenticationFilter，将认证服务当做一个资源服务，解析请求头中的token
//        http.oauth2ResourceServer((resourceServer) -> resourceServer
//                .jwt(Customizer.withDefaults())
//                .accessDeniedHandler(SecurityUtils::exceptionHandler)
//                .authenticationEntryPoint(SecurityUtils::exceptionHandler)
//        );
//
//        // 这里使用自定义的未登录处理，并设置登录地址为前端的登录地址
//        http
//                // 当未登录时访问认证端点时重定向至login页面
//                .exceptionHandling((exceptions) -> exceptions
//                        .defaultAuthenticationEntryPointFor(
//                                // 这里使用自定义的未登录处理，并设置登录地址为前端的登录地址
//                                new LoginTargetAuthenticationEntryPoint(LOGIN_URL),
//                                new MediaTypeRequestMatcher(MediaType.TEXT_HTML)
//                        )
//                );
//        http.securityContext(context -> context.securityContextRepository(redisSecurityContextRepository));
//        return http.build();
//    }
//
//    /**
//     * 跨域过滤器配置
//     *
//     * @return CorsFilter
//     */
//    @Bean
//    public CorsFilter corsFilter() {
//
//        // 初始化cors配置对象
//        CorsConfiguration configuration = new CorsConfiguration();
//
//        // 设置允许跨域的域名,如果允许携带cookie的话,路径就不能写*号, *表示所有的域名都可以跨域访问
//        configuration.addAllowedOrigin("http://127.0.0.1:5173");
//        // 设置跨域访问可以携带cookie
//        configuration.setAllowCredentials(true);
//        // 允许所有的请求方法 ==> GET POST PUT Delete
//        configuration.addAllowedMethod("*");
//        // 允许携带任何头信息
//        configuration.addAllowedHeader("*");
//
//        // 初始化cors配置源对象
//        UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource();
//
//        // 给配置源对象设置过滤的参数
//        // 参数一: 过滤的路径 == > 所有的路径都要求校验是否跨域
//        // 参数二: 配置类
//        configurationSource.registerCorsConfiguration("/**", configuration);
//
//        // 返回配置好的过滤器
//        return new CorsFilter(configurationSource);
//    }

//    /**
//     * 先暂时配置一个基于内存的用户，框架在用户认证时会默认调用
//     * {@link UserDetailsService#loadUserByUsername(String)} 方法根据
//     * 账号查询用户信息，一般是重写该方法实现自己的逻辑
//     *
//     * @param passwordEncoder 密码解析器
//     * @return UserDetailsService
//     */
//    @Bean
//    public UserDetailsService userDetailsService(PasswordEncoder passwordEncoder) {
//        UserDetails userDetails = User.withUsername("user")
//                .password(passwordEncoder.encode("password"))
//                .roles("normal_user", "admin")
//                .authorities("app", "web")
//                .build();
//
//        return new InMemoryUserDetailsManager(userDetails);
//    }

//    @Bean
//    public UserDetailsService userDetailsService(DataSource dataSource, PasswordEncoder passwordEncoder) {
//        //
//        UserDetails user1 = User.withUsername()
//        UserDetails user2 = User.builder()
//                .username("admin")
//                .password(passwordEncoder.encode("admin"))
//                .roles("admin_user")
//                .authorities("app","web")
//                .build();
//        userDetailsManager.createUser(user1);
//        userDetailsManager.createUser(user2);
//        userDetailsManager.loadUserByUsername("admin");
//        return new JdbcUserDetailsManager(dataSource);
//
//    }


}
